package leetcode.code0335;

public class Solution0 extends Solution335 {

	private int len;

	@Override
	public boolean isSelfCrossing(int[] distance) {
		this.len = distance.length;
		if (len < 4)// 不足4个撞不上
			return false;
		return this.f(distance, 3);// 向东
	}

	private boolean f(int[] distance, int index) {
		if (index == len) {
			return false;
		}
		if (this.check(distance, index)) {
			return true;
		}
		return this.f(distance, index + 1);
	}

	private boolean check(int[] distance, int index) {
		if (distance[index - 1] <= distance[index - 3] && distance[index] >= distance[index - 2]) {
			return true;
		}
		if (index - 4 >= 0 && distance[index - 1] == distance[index - 3]
				&& distance[index - 2] == distance[index] + distance[index - 4]) {// 转一圈成环了
			return true;
		}
		if (index - 5 >= 0 && distance[index - 3] == distance[index - 1] + distance[index - 5]
				&& distance[index - 2] == distance[index] + distance[index - 4]) {// 转一圈成环了
			return true;
		}
		return false;
	}

//	private boolean f3(int[] distance, int index) {
//		if (this.check(distance, index)) {
//			return true;
//		}
//		if (index < len) {
//			if (this.f0(distance, index + 1)) {// 向北
//				return true;
//			}
//		}
//		return false;
//	}
//
//	private boolean f0(int[] distance, int index) {
//		if (this.check(distance, index)) {
//			return true;
//		}
//		if (index < len) {
//			if (this.f1(distance, index + 1)) {// 向西
//				return true;
//			}
//		}
//		return false;
//	}
//
//	private boolean f1(int[] distance, int index) {
//		if (this.check(distance, index)) {
//			return true;
//		}
//		if (index < len) {
//			if (this.f2(distance, index + 1)) {// 向向南
//				return true;
//			}
//		}
//		return false;
//	}
//
//	private boolean f2(int[] distance, int index) {
//		if (this.check(distance, index)) {
//			return true;
//		}
//		if (index < len) {
//			if (this.f3(distance, index + 1)) {// 向向南
//				return true;
//			}
//		}
//		return false;
//	}

	public static void main(String[] args) {
		Solution0 so = new Solution0();
		so.debug1();
		so.debug2();
		so.debug3();
		so.debug4();
		so.debug5();
		so.debug6();
		so.debug7();
		so.debug8();
	}

}
